In a typical client-server system, a plurality of clients are coupled to one or more servers, which are in turn coupled to one or more data storage devices. The clients can access files in the data storage devices through associated servers. To maintain high data communication performance, high availability and efficient cache operations are important to data storage devices. To achieve these goals, fail-over in data storage devices has been implemented and commercially available for a number of years. However, conventional implementations require software running in the server (or host computer) to redirect the I/O from the server over an alternate path or the same path but to a different data storage device address, i.e., a secondary address. Different vendors typically have different types of software for controlling fail-over operations in data storage devices. In a typical corporate environment, equipment from multiple vendors may be used to set up a client-server system. The server of one vendor may include fail-over software that is incompatible with the data storage devices of another vendor. In such a situation, in order to properly set up the system, extensive testing to resolve incompatibility problems is often required. As a result, it is very inefficient and time-consuming to set up such a system. One way to solve the incompatibility problem is to always purchase equipment from the same vendor. However, this would lead to inflexibility in selecting equipment and future upgrading the system. Restricting hardware buyers to a single vendor also incur high costs.
Therefore, there exists a need for a method and apparatus for high availability and caching data storage devices that allows fail-over in the controllers and/or data storage devices to be transparent to a server so that extensive testing to resolve incompatibility between equipment of different vendors can be substantially minimized.